#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

#include<iostream>

using namespace std;

#include<iostream>

using namespace std;

class base1

{

public:

    base1()

    {

        cout << "class basel" << endl;

    }

};

class base2

{

public:

    base2()

    {

        cout << "class base2" << endl;

    }

};



class level1 : public base2, virtual public base1

{

public:

    level1()

    {

        cout << "class level1" << endl;

    }

};



class level2 : public base2, virtual public base1

{

public:

    level2()

    {

        cout << "class level2" << endl;

    }

};

class toplevel :public level1, virtual public level2

{

public:

    toplevel()

    {

        cout << "class toplevel" << endl;

    }

};



int main()

{

    toplevel obj;

    return 0;

}



//class B
//
//{
//
//public:
//
//    B(int i)
//
//    {
//
//        b1 = i;
//
//        cout << "Constructor B" << endl;
//
//    }
//
//    void Print()
//
//    {
//
//        cout << b1 << endl;
//
//    }
//
//private:
//
//    int b1;
//
//};
//
//
//
//class B2
//
//{
//
//public:
//
//    B2(int i)
//
//    {
//
//        b2 = i;
//
//        cout << "Constructor B2" << endl;
//
//    }
//
//    void Print()
//
//    {
//
//        cout << b2 << endl;
//
//    }
//
//private:
//
//    int b2;
//
//};
//
//
//
//class A : public B2, public B
//
//{
//
//public:
//
//    A(int i, int j, int l);
//
//    void Print();
//
//private:
//
//    int a;
//
//};
//
//
//
//A::A(int i, int j, int l) : B(i), B2(j)
//
//{
//
//    a = l;
//
//    cout << "Constructor A" << endl;
//
//}
//
//
//
//void A::Print()
//
//{
//
//    B::Print();
//
//    B2::Print();
//
//    cout << a << endl;
//
//}
//
//
//
//int main()
//
//{
//
//    A aa(3, 2, 1);
//
//    aa.Print();
//
//    return 0;
//
//}